package com.ct.application.commons.validator.valid;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.Retention;
import java.lang.annotation.Target;

import static java.lang.annotation.ElementType.*;
import static java.lang.annotation.RetentionPolicy.RUNTIME;

/**
 * 自定义值限制检验注解:
 * 	1.编写一个自定义的检验注解
 * 	2.编写一个自定义的检验器
 * 	3.关联自定义的检验器和自定义的检验注解
 *
 * @Constraint(validatedBy = {IntValueLimitConstraintValidator.class})     //指定检验器
 * @Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })     //表示该注解可以用在哪种类型上面
 * @Retention(RUNTIME)                                                     //运行时获取这个注解
 *
 * @author:Carlo
 * @date:2020/8/20/0020 10:26
 */
@Documented
@Constraint(validatedBy = {IntValueLimitConstraintValidator.class})
@Target({ METHOD, FIELD, ANNOTATION_TYPE, CONSTRUCTOR, PARAMETER })
@Retention(RUNTIME)
public @interface IntValueLimit {

    /* 自定义检验注解必须满足规范,在JSR303规范中,声明了检验注解必须拥有三个属性,分别是以下三个
        message表示检验信息出错时的提示语
        groups表示支持分组的功能
        Payload表示自定义一些负载信息*/
    String message() default "值范围不符合";

    Class<?>[] groups() default {};

    Class<? extends Payload>[] payload() default {};

    /**
     * int类型值的方法
     * @return
     */
    int[] intValues() default {};
}
